package org.example.inner;

/**
 * 内部类
 */
public class Outer {
    private int x;

    public static void main(String[] args) {

        Outer out = new Outer();
        //成员内部类（非静态内部类）
        Inner inner = out.new Inner();
        inner.print();
        //静态内部类
        Outer.StaticInner staticInner = new Outer.StaticInner();
        staticInner.print();
        //局部内部类

        //匿名内部类
        new Thread(new Runnable() {
            { System.out.println("初始化块"); } // 实例初始化块
            public void run() {
                System.out.println("运行中");
            }
        }).start();
    }

    //成员内部类（非静态内部类）
    class Inner {
        void print() {
            System.out.println(x); // 访问外部类私有变量
        }
    }


    //静态内部类
    static class StaticInner {
        void print() {
            System.out.println("静态内部类");
        }
    }

    //局部内部类
    void method() {
        final int y = 10;
        class LocalInner {
            void print() {
                System.out.println(y); // 只能访问final变量
            }
        }
        LocalInner li = new LocalInner();
        li.print();
    }
}
